De getElementsByClassName methode
Home

De getElementsByClassName methode

De getElementsByClassName methode

De methode document.getElementsByClassName retourneert een array die alle html elementen waarvan het class attribuut een bepaalde opgegeven waarde heeft.

Gebruik

Net zoals document.getElementById een element selecteert met een bepaalde id waarde, verzamelt getElementsByClassName elementen op een pagina met dezelfde class waarde. Dat Zoals het meervoud naam van de methode laat vermoeden verzamelt getElementsByClassName een reeks van elementen, en retourneert dus altijd een array, zelfs als het overeenkomt met slechts één element op de pagina.

Technisch gezien retourneert getElementsByClassName een HTMLCollection array, een matrix-structuur, in plaats van een echte array.

We hebben bijvoorbeeld het volgende element op de pagina:

<div class="banner"> … </div>

We kunnen dit element en alle andere waarvan de waarde van het class attribuut banner opvragen met de methode getElementsByClassName en het resultaat in een variabele stoppen:

var banner = document.getElementsByClassName("banner");

Het eerste element kunnen we in de Developer Console opvragen met:

banner[0]

en krijgen als antwoord:

> <div class="banner"> … </div>

Omdat de retourwaarde altijd een array is, moet je er doorheen lopen om de indivuele elementen te selecteren. Traditioneel wordt doe je dit met een for lus, maar er zijn veel alternatieven:

for (var i = 0; i < banner.length; i++) { 
    // doe iets met banner[i]; 
}

Veelheid

Elementen kunnen meerdere klassen toegewezen krijgen in het attribuut class. Dus stelt getElementsByClassName ons in staat om bepaalde combinaties van klassen te selecteren:

var bannerBig = document.getElementsByClassName ("banner big");

De bovenstaande JavaScript haalt alle elementen op die zowel van klasse banner als van de klasse big zijn.

Bereik en doel

In tegenstelling tot de methode document.getElementById, kan je de methode getElementsByClass opvragen vanaf om het even welke element op de pagina. Dat wil zeggen dat je het bereik van je zoekactie kan vernauwen tot kinderen van het opgegeven element.

Veronderstel dan je twee nav elementen hebt:

<nav id="mainnav">
    <a href="#" class="single">Home</a>
    <a href="#" class="single">Over ons</a>
    <a href="#" class="multi">Opties</a> 
    <a href="#" class="multi">Onze producten</a>
    <a href="#" class="multi">Onze klanten</a>
</nav>

<nav id="product">
    <a href="#" class="single">Boter</a>
    <a href="#" class="single">Vis</a>
    <a href="#" class="single">Vlees</a>
    <a href="#" class="single">Groenten</a>
    <a href="#" class="single">Drank</a>
</nav>

Je kan alle 'single( links ophalen met:

var single = document.getElementsByClassName("single");

Alle 'single' links, maar alleen van de nav met id = mainnav:

var nav = document.getElementById("mainnav"); 
var navlinks = nav.getElementsByClassName("single");

Als je de referentie naar #mainnav niet nodig hebt kan je de twee statements samentrekken tot één:

var navlinks = document.getElementById("mainnav").getElementsByClassName("single");

JI
2017-01-13 16:05:07